import __DB__               from './js/db/index.js';
import __canvas__           from './js/canvas/index.js';
import __customEvent__      from './js/customEvent/index.js';
import __cntMenu__          from './js/cntMenu/index.js';
import __node__             from './js/node/index.js';
import __drag__             from './js/drag/index.js';
import __automatic__        from './js/line/automatic.js';
import __api__              from './js/api/index.js';
import __tool__             from './js/tool/index.js';

class xmind extends __api__{
    constructor(res){
        /*
            res:{
                id              : "",        // 容器ID
                direction       : "",        // 图谱方向，非必填，默认：level
                data            : [],        // 图谱数据
                onload          : ()=>{}     // 初次加载完后的回调
                style           : {
                    node:{
                        rule    : {icon:"",cls:""},
                        compute : {icon:"",cls:""},
                        resource: {icon:"",cls:""},
                        general : {icon:"",cls:""},
                    }
                }
            }
        */
        super();
        let initData = this.init();
        __DB__.publicData = __tool__.extends(initData,res);

        let $s = document.getElementById(res.selector);
        __canvas__.init({el:$s});

        this.direction = __DB__.publicData.direction || "level";
        let nodes = res.data;
        // 节点的样式和图标
        __canvas__.nodeStyleInit = {
            rule        : __DB__.publicData.style.node.rule||{icon:"",cls:""},
            compute     : __DB__.publicData.style.node.compute||{icon:"",cls:""},
            resource    : __DB__.publicData.style.node.resource||{icon:"",cls:""},
            general     : __DB__.publicData.style.node.general||{icon:"",cls:""},
        }

        if(nodes&&nodes.length > 0)__DB__.setNodes(nodes);

        // 初次加载完后的回调
        if(res.onload && typeof res.onload === 'function')res.onload();
    }

    init(){
        let $init = {
            selector        : "",                   // 必填，容器ID
            nodes           : [],                   // 必填，初始节点集
            width           : null,                 // 容器宽
            height          : null,                 // 容器高
            canvasScale     : 10,                   // 无限画布比例 例canvasScale=2 2倍于容器大小
            scale           : {                     // 鼠标缩放比例
                max:1.9,
                min:0.5,
            },
            pull            : false,
            onload          : ()=>{},               // 节点更新后需要重新初始化的操作（自定义）
            hawkEye         : {                     // 鹰眼
                open : false,
                pid  : null,
            },
            style:{                                 // 自定义样式
                line:{
                    color   : '#207CFC',
                    size    : 2,
                },
                automaticLine:{                     // 关联线样式
                    color           : '#819FCE',
                    colorChecked    : "#fb685c",
                    size            : 2,

                },
                node:{
                    rule     : {icon:"",cls:""},
                    compute  : {icon:"",cls:""},
                    resource : {icon:"",cls:""},
                    general  : {icon:"",cls:""},
                    class    : '',                  // 所有节点的样式
                    cls      : [],                  // 多节点样式{id:"id",class:"className"}
                    space_x  : 80,                  // 节点之间水平间距
                    space_y  : 28,                  // 节点之间垂直间距
                    hasIcon  : false                // 节点是否有图标
                    
                },
                contextMenu:{
                    class:''
                },
            },
            nodeLimit:100,// 固定尺寸-全局
            nodeStateCls:{          // 节点状态样式
                ing         :"ing",
                success     :"success",
                fail        :"fail"
            },
        }

        return $init;
    }
}

export default xmind;